package com.aaa.jvmtest.gcmanagement;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 演示GC Root，判断无用对象并清理
 * 下载eclipse mat独立工具，可查看内存泄露等更加详细的内存信息。 这里用来查看 GC Root对象，看代码中有多少GC root
 *
 * @author Tu
 * @date 2022/6/19 15:39
 */
public class GCRoot {

    public static void main(String[] args) throws IOException {
        //ArrayList 属于线程root
        //根对象只存在于堆中，跟前面的变量。
        //当使用list时候，判断GC为：引用的变量(list)是否引用root对象（new ArrayList）
        List<Object> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        System.out.println("1:引用对象");
        System.in.read();

        //赋空后，该变量不再引用堆中的root对象，所以可以被回收
        list = null;
        System.out.println("2:去除引用对象");
        System.in.read();
        System.out.println("结束");
    }

}
